//从 顺 序 表 中 删 除 具 有 最 小 值 的 元 素 (假 设 唯 一 ) 并 由 函 数 返 回 被 删 元 素 的 值 。
// 空 出 的 位 置由最后一个元素填补， 若顺序表为空， 则显示出错信息并退出运行。
#include<iostream>
using namespace std;
#define MaxSize 50
#define ElemType int

struct List{
    ElemType data[MaxSize];
    int length;

    int InitList(List &L){
        L.length=0;
        return L.length;
    }

    int Length(List &L){
        return L.length;
    }

    bool ListInsert(List &L,int i,ElemType e){
        if(i<1||i>L.length+1){   //判断i的范围是否有效
            return false;
        }
        if(L.length>=MaxSize){   //当前存储空间已满，不能插入
            return false;
        }
        for (int j = L.length; j >= i; j--){ //将第i个元素及之后的元素后移
            L.data[j]=L.data[j-1];
        }
        L.data[i-1]=e;           //在第i个位置放入e
        L.length++;              //线性表长度加1
        return true;
        
    }
};

ElemType deleteMin(List &l);


int main(){
    List l;
    l.InitList(l);
    l.ListInsert(l,1,0);
    l.ListInsert(l,1,1);
    l.ListInsert(l,1,2);
    l.ListInsert(l,1,3);
    l.ListInsert(l,1,4);
    cout<<deleteMin(l)<<endl;

}


bool deleteMin(List &l,ElemType &value){
    if(l.length==0){
        return false;//表空，终止操作返回
    }
    value = l.data[0];
    int index=0;
    for (int i = 1; i < l.length; i++){ //循环，寻找最小的元素值
        if(l.data[i]<value){
            value=l.data[i]; //记录当前的最小值
            index=i;   //记录当前最小值元素的坐标
        }
    }
    l.data[index]=l.data[l.length-1]; //最小值位置用最后一个元素填充
    l.length--;
    return true;
    

}

